#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 20
#define SWAP(a, b) \
    do { \
        typeof(a) (t); \
        (t) = (a); \
        (a) = (b); \
        (b) = (t); \
    } while(0)


void sort(int arr[], int len);

int main(void)
{
    int arr[N];
    srand(time(NULL));
    int i;

    /* 给数组赋值 */
    for (i = 0; i < N; i++) {
        arr[i] = rand() % 1000;
        printf("%d ", arr[i]);
    }
    printf("\n");

    /* 给数组排序 */
    sort(arr, N);

    for (i = 0; i < N; i++)
        printf("%d ", arr[i]);

    printf("\n");
    return 0;
}

/* 选择排序 */
void sort(int arr[], int len)
{
    /* 实现从小到大排序 */
    int i;
    int cur_ind = 0; // 当前未排好序的数据的最小下标
    int min_ind; // 未排序的数据的最小值的下标

    while (cur_ind < len) {    
        min_ind = cur_ind; // 每次找最小值都是从未排序的数据开始找

        for (i = cur_ind; i < len; i++) {
            if (arr[min_ind] > arr[i]) // 寻找未排序的数据的最小值的下标
                min_ind = i;
        }

        SWAP(arr[cur_ind], arr[min_ind]); // 交换数据

        cur_ind++; // 当前未排序的数据的最小下标加1
    }

    printf("\n");
}


